iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
Software Development

用C++ 設計程式中的系統櫃系列 第 7

[Day 07] 用C++ 設計程式中的系統櫃:節點的初始化

  • 分享至 

  • xImage
  •  

經過上一篇的介紹,我們應該知道鏈結串列的單位是節點吧!

節點又會因為「單向鏈結串列」與「雙向鏈結串列」的差異,而有些微不同。

節點的內容其實不只一個,所以我們會更加偏向將們封裝成一個物件。
在 C++ 中,封裝成物件大致分成兩種形式:結構 struct、類別 class
在這裡,我們都以「類別」來實作!


建立節點

定義「單向鏈結串列」的節點

Singly Linked List 上的 Node 簡稱 SLLNode

class SLLNode {
    int data; // 資料內容
    SLLNode *next; // 鏈結
};

定義「雙向鏈結串列」的節點

Doubly Linked List 上的 Node 簡稱 DLLNode

class DLLNode {
    int data; // 資料內容
    DLLNode *next, *prev; // 鏈結
};

為什麼鏈結的表示要用「節點型態的指標」?
因為當我們要取得下一個節點的資料內容之前,我們必須先取得下一個節點的記憶體位址,而「位址」是存在指標中,因此我們以指標來實作鏈結。


建立鏈結串列

「單向鏈結串列」中最重要的是紀錄第一個節點的指標 head
透過 head ,我們可以到達任何鏈結串列上的節點。

「雙向鏈結串列」中最重要的是紀錄第一個節點的指標 head、最後一個節點的指標 tail
透過 head, tail ,我們可以到達任何鏈結串列上的節點。

在未來,我們會為鏈結串列加上更多的函式,如:新增節點、刪除節點、翻轉鏈結串列等,所以我們會將鏈結串列相關的變數、函式包裝成「類別的屬性、方法」。

class SLL {
private:
    SLLNode *head;
public:
    SLL() { 
        this -> head = NULL; 
    }
    // methods
};
class DLL {
private:
    DLLNode *head, *tail;
public:
    DLL() { 
        this -> head = NULL; 
        this -> tail = NULL;
    }
    // methods
};

為什麼要將 head, tail 設為私有屬性?
因為剛剛提到這兩個變數代表著整個鏈結串列,我們不會希望大家都可以更改他們。
唯一會有機會改變這兩個變數的只有類別方法們,但是他們同屬這個類別,因此私有變數仍可以被他們觸及。


把鏈結串列的模板建立完成後,下一篇就開始新增一些方法到鏈結串列類別中吧!


上一篇
[Day 06] 用C++ 設計程式中的系統櫃:鏈結串列概論
下一篇
[Day 08] 用C++ 設計程式中的系統櫃:linkedList::pushFront()
系列文
用C++ 設計程式中的系統櫃30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言